home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Interactive Web Graphics with Shout 3D
/
Interactive Web Graphics With Shout 3D.iso
/
mac
/
Code
/
Chapter Code.exe
/
Chapter10
/
TargetViewpointTestPanel.java
< prev
Wrap
Text File
|
2000-09-08
|
3KB
|
117 lines
package applets;
import shout3d.*;
import shout3d.core.*;
import custom_nodes.*;
public class TargetViewpointTestPanel extends Shout3DPanel implements DeviceObserver {
int pixelStartX;
int pixelStartY;
float headingSpeed = 0.0f;
float pitchSpeed = 0.0f;
float distanceSpeed = 0.0f;
TargetViewpoint cam;
public TargetViewpointTestPanel(Shout3DApplet applet){
super(applet);
}
public void customInitialize() {
addDeviceObserver(this,"MouseInput", null);
getRenderer().addRenderObserver(this, null);
cam = (TargetViewpoint) getCurrentBindableNode("Viewpoint");
}
protected void finalize() {
removeDeviceObserver(this,"MouseInput");
getRenderer().removeRenderObserver(this);
}
public boolean onDeviceInput(DeviceInput di, Object userData) {
MouseInput mi = (MouseInput) di;
switch (mi.which){
case MouseInput.DOWN:
pixelStartX = mi.x;
pixelStartY = mi.y;
return true;
case MouseInput.UP:
headingSpeed = 0.0f;
pitchSpeed = 0.0f;
distanceSpeed = 0.0f;
return true;
case MouseInput.DRAG:
//if left button used
if(mi.button == 0) {
int pixelEndX = mi.x;
int pixelEndY = mi.y;
int dragDistanceX = pixelEndX - pixelStartX;
int dragDistanceY = pixelEndY - pixelStartY;
//convert drag to rotation speeds
//at 1/70 radians/sec for each pixel dragged.
//i.e., dragging 70 pixels creates
//speed of 1 radian per second
headingSpeed = dragDistanceX/70f;
pitchSpeed = dragDistanceY/70f;
return true;
}//end of 0 if
//if right button used
if(mi.button == 1) {
int pixelEndY = mi.y;
int dragDistanceY = pixelEndY - pixelStartY;
//convert drag to zoom speed
//at 1/150 meters/sec for each pixel dragged
//i.e., dragging 150 pixels creates
//speed of 1 meter per second
distanceSpeed = dragDistanceY/150f;
return true;
}//end of 1 if
}//end of switch
return false;
}
public void onPreRender (Renderer r, Object o) {
float headingDelta = headingSpeed/getFramesPerSecond();
float temp = cam.heading.getValue() - headingDelta;
cam.heading.setValue(temp);
float pitchDelta = pitchSpeed/getFramesPerSecond();
temp = cam.pitch.getValue() - pitchDelta;
cam.pitch.setValue(temp);
float distanceDelta = distanceSpeed/getFramesPerSecond();
temp = cam.distance.getValue() + distanceDelta;
cam.distance.setValue(temp);
}
}//end of class